#!/usr/bin/python
# -*- coding: utf-8 -*-

##
 # Copyright 2009 Caio Souza
 # This file is part of Rpyg.
 #
 # Rpyg is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # Rpyg is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with Rpyg. If not, see <http://www.gnu.org/licenses/>.
 ##

'''Módulo de definição do controle de um personagem'''

from threading import RLock

from rpyg.Utils import *

class Controller(object):
    '''Classe base para todos os tipos de controle de um personagem, não deve ser instanciada.'''

    def __init__(self):
        '''Construtor da classe, deve ser sobrescrita pela classe filha.'''
        
        self._lock = RLock()
        '''Cadeado para sincronia dos controles.'''

    def get(self, i, j):
        '''Retorna a ação a ser tomada pelo personagem, deve ser sobrescrita.'''

        raise NotImplementedError('get method must be implemented in subclass')

    def moved(self):
        '''Chamada para confirmar o estado do personagem.'''

    def setMapPos(self, x, y):
        '''Atualiza a posição no mapa do jogo.'''

    def setTileMap(self, tilemap):
        '''Diz sobre qual mapa de tiles está sendo controlado.'''

        self._tilemap = tilemap
        '''Mapa de tiles do controle.'''
